package com.zelin.dao.dyna;

import com.zelin.dao.UserDao;
import com.zelin.dao.impl.UserDaoImpl;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**
 * ------------------------------
 * 功能：CGLIB实现动态代理--》通过继承实现
 * 作者：WF
 * 微信：hbxfwf13590332912
 * 创建时间：2021/10/13-15:02
 * ------------------------------
 */
public class UserDaoCGLIBDynaProxyImpl implements MethodInterceptor {

    /**
     * 功能: 生成代理对象
     * 参数:
     * 返回值: com.zelin.dao.UserDao
     * 时间: 2021/10/13 15:06
     */
    public UserDao createUserDao(){
        //1. 构造 一个Enhancer对象
        Enhancer enhancer = new Enhancer();
        //2. 设置父类
        enhancer.setSuperclass(UserDaoImpl.class);
        //3. 设置回调
        enhancer.setCallback(this);
        //4. 创建目标对象
        Object o = enhancer.create();
        return (UserDao) o;
    }
    /**
     * 功能: 调用目标对象的方法
     * 参数:
     * 返回值: java.lang.Object
     * 时间: 2021/10/13 15:06
     */
    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        //1. 得到方法名
        String name = method.getName();
        //2. 判断是否是query
        if(name.equalsIgnoreCase("query")){
            checkSecurity();
        }
        return methodProxy.invokeSuper(o,objects);
    }
    private void checkSecurity(){
        System.out.println("使用CGLIB进行安全性检查...");
    }
}
